#include <iostream>
//用数组实现静态顺序表
typedef int ElemType;
#define MAXSIZE 50

typedef struct
{
    ElemType data[MAXSIZE]; //创建一个数组
    int length; //表示数组当前含有元素长度
}SqList;

//插入元素
bool list_insert(SqList &L,int pos,ElemType val)
{
    //检查位置合法
    if(pos<1 || pos>L.length+1)
    {
        return false;
    }
    //检查容量是否已满
    if(L.length >= MAXSIZE)
    {
        return false;
    }
    //将pos位置开始和后面的元素往后移动一位
    for(int i=L.length; i>=pos; i--)
    {
        L.data[i]=L.data[i-1];
    }
    //在pos位置插入元素
    L.data[pos-1]=val;
    L.length++;
    return true;
}

bool list_del(SqList &L,int pos, ElemType &del)
{
    //检查位置是否合法
    if(pos<1 || pos>L.length)
    {
        return false;
    }
    //记录删除的元素
    del=L.data[pos-1];
    //删除元素（将pos位置后面的元素往前移动一位）
    for(int i=pos;i<L.length;i++)
    {
        L.data[i-1]=L.data[i];
    }
    L.length--;
    return true;
}

//查找元素的顺序表的位置（顺序表位置是从1开始）
int list_find(SqList L,ElemType val)
{
    //判断是否为空
    if(L.length==0)
    {
        return 0;
    }
    //遍历查找
    for(int i=0; i<L.length; i++)
    {
        if(L.data[i]==val)
        {
            return i+1;
        }
    }
    //未找到返回0;
    return 0;
}

//打印数组
void list_print(SqList L)
{
    for(int i=0; i<L.length; i++)
    {
        printf("%3d",L.data[i]);
    }
    printf("\n");
}


int main() {
    //创建顺序表
   SqList L;
   L.data[0]=1;
   L.data[1]=2;
   L.data[2]=3;
   L.length=3;

   //插入元素
    list_insert(L,1,0);
    //打印顺序表
    list_print(L);
    list_insert(L,5,4);
    list_print(L);
    list_insert(L,3,9);
    list_print(L);

    ElemType del;//记录删除元素的值
    //删除元素
    list_del(L,3,del);
    list_print(L);
    list_del(L,1,del);
    list_print(L);

    int pos; //记录查找返回顺序表的位置
    pos= list_find(L,4);
    if(pos)
    {
        printf("this val exist\n");
    }
    else
    {
        printf("this val not found\n");
    }
    return 0;
}
